bin/refs: Disallow creating broken aliases
authorJonathan Lebon <jonathan@jlebon.com>
Tue, 30 Oct 2018 17:21:46 +0000 (13:21 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 31 Oct 2018 12:32:30 +0000 (12:32 +0000)
This is the alias version of #1749. I.e. we want to make sure that one
can't even create an alias which would end up dangling.

See also: https://pagure.io/releng/issue/7891

Closes: #1768
Approved by: sinnykumari

src/ostree/ot-builtin-refs.c
tests/test-refs.sh

index f88d08a66bc80297d949dfc0ddef39053c403afe..630605a03a52d46df174981cb4d391f7a3cdb05d 100644 (file)
@@ -221,6 +221,9 @@ static gboolean do_ref (OstreeRepo *repo, const char *refspec_prefix, GCancellab
         {
           if (remote)
             return glnx_throw (error, "Cannot create alias to remote ref: %s", remote);
+          if (!g_hash_table_contains (refs, refspec_prefix))
+            return glnx_throw (error, "Cannot create alias to non-existent ref: %s",
+                               refspec_prefix);
           if (!ostree_repo_set_alias_ref_immediate (repo, remote, ref, refspec_prefix,
                                                     cancellable, error))
             goto out;
index 1730423d4323d0ec13425f3b6803cc2f5f80b6e7..83da04ff53d3614958a5dec7cdcdb499cab67677 100755 (executable)
@@ -25,7 +25,7 @@ set -euo pipefail
 
 setup_fake_remote_repo1 "archive"
 
-echo '1..6'
+echo '1..7'
 
 cd ${test_tmpdir}
 mkdir repo
@@ -207,3 +207,9 @@ if ${CMD_PREFIX} ostree --repo=repo refs -A exampleos/x86_64/27/server --create=
 fi
 assert_file_has_content_literal err.txt 'Cannot create alias to remote ref'
 echo "ok ref no alias remote"
+
+if ${CMD_PREFIX} ostree --repo=repo refs -A --create foobar nonexistent 2>err.txt; then
+    fatal "Created alias to nonexistent ref?"
+fi
+assert_file_has_content_literal err.txt 'Cannot create alias to non-existent ref'
+echo "ok ref no broken alias"